/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.sapra.Prefactura;

import caintra.Sapra.Model.Calendariofacturacionpracticantes;
import caintra.Sapra.Model.Empresa;
import caintra.Sapra.Model.PrefacturaCaintra;
import caintra.Sapra.Model.PrefacturaDetalle;
import caintra.Sapra.Pantalla.Prefactura.PrefacturaMQuery;
import java.io.FileWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.sapra.core.DBManager;
import org.sapra.dao.Abono_AdeudoMO;
import org.sapra.dao.Factura;
import org.sapra.dao.FacturaPartida;
import org.sapra.dao.Usuario;

import org.sapra.dep.CalendarioFacturacion;
import org.sapra.logon.dLogin;

/**
 *
 * @author Administrador
 */
public class migracionPrefactura3 {

ArrayList<String> ids;

List<PrefacturaDetalle> cuentas;
    public void arregla_cuenta(){
        PrefacturaMQuery query=new PrefacturaMQuery();
        PrefacturaDetalle pd;

        try {
            FileWriter head=new FileWriter("C:/Users/Luiz/Desktop/header.txt");
            cuentas = query.cuentas();
            for(int i=0;i<cuentas.size();i++){
                pd=(PrefacturaDetalle)cuentas.get(i);
                if(pd.getCuenta() == null || pd.getCuenta().trim().equals(""))
                    continue;


                List<PrefacturaDetalle> c2=query.sel_cuenta(pd.getPaterno(), pd.getMaterno(), pd.getNombre());
                if(c2 == null || c2.isEmpty())
                    continue;
                String sql="";
                for(int j=0;j<c2.size();j++){
                    PrefacturaDetalle detalle=(PrefacturaDetalle)c2.get(j);
                    if(detalle.getCuenta() == null || detalle.getCuenta().trim().equals("")){
                        sql="UPDATE prefactura_detalle set cuenta='"+pd.getCuenta().trim()+"'"
                                + "  WHERE practicante_Id="+detalle.getPracticante_Id();
                         query.actualiza_cuenta(sql);
                    sql+=";";
                    head .write(sql);
                    head.write("\n");
                    }
                   
                }


                
            }
            head.close();
            head.flush();
        } catch (Exception e) {
            System.out.println(e.toString());
        }


    }

    public void fix(){

        List<org.sapra.dao.Empresa> lista_empresa;
        List<CalendarioFacturacion> lista_periodo;
        PrefacturaMO prefactura=new PrefacturaMO();
        lista_empresa =dLogin.getEmpresas();
        SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd");
        ArrayList<PrefacturaDetalle> lista_detalle;

        List<Factura> facturas;

        List<FacturaPartida> partidas;
        double total=0.0;
        double dia=0.0;
        double seguro_empresa=0.0;
        double abono_empresa=0.0;
        double adeudo_empresa=0.0;

        facturas=dLogin.getFacturas();

        if(facturas == null || facturas.isEmpty())
            return;
        PrefacturaMQuery query=new PrefacturaMQuery();
        ids=new ArrayList<String>();
        //HashMap super_hm=query.prefacturas();
        //if(super_hm.isEmpty())
            //return;
        String periodos_no="{";
        for(int i=0;i<facturas.size();i++){
            Factura factura=(Factura)facturas.get(i);
            partidas=dLogin.getPartidas(factura.getFk_periodo());
            Usuario u=dLogin.getUsuario(factura.getAutorizo().trim());
            Empresa emp = query.getEmpresas(factura.getEmpresaId());
            Calendariofacturacionpracticantes periodo=dLogin.getPeriodo(factura.getFk_periodo());



            if(partidas != null && !partidas.isEmpty()){
                    String id_str=""+factura.getFk_periodo();
                    //if(super_hm.containsKey(id_str))
                        //continue;
                    ids.add(id_str);
                    periodos_no+=""+id_str+",";
                    total=0.0;
                    seguro_empresa=0.0;
                    abono_empresa=0.0;
                    adeudo_empresa=0.0;
                    lista_detalle=new ArrayList<PrefacturaDetalle>();
                    for(int j=0;j<partidas.size();j++){
                        FacturaPartida p = (FacturaPartida)partidas.get(j);
                        PrefacturaDetalle d=new PrefacturaDetalle();
                         List<Abono_AdeudoMO> lista;

                                 try {
                                     lista=DBManager.getQuery(Abono_AdeudoMO.class, "select sum(Cantidad) AS Cantidad  from abono_empresa WHERE fk_periodoId="+factura.getFk_periodo());

                                     if(lista != null && ! lista.isEmpty())
                                        abono_empresa = (double)lista.get(0).getCantidad();

                                     lista=DBManager.getQuery(Abono_AdeudoMO.class, "select sum(Cantidad) AS Cantidad  from adeudo_empresa WHERE fk_periodoId="+factura.getFk_periodo());

                                     if(lista != null && ! lista.isEmpty())
                                        adeudo_empresa = (double)lista.get(0).getCantidad();

                                 } catch (Exception e) {
                                     abono_empresa = 0.0;
                                     adeudo_empresa = 0.0;
                                 }
                         d.setNombre(p.getNombre());
                         d.setPaterno(p.getPaterno());
                         d.setMaterno(p.getMaterno());
                         d.setCentrocosto(p.getCentrocosto());
                         d.setFec_inicio(f.format(p.getFec_inicio()));
                         d.setFec_termino(f.format(p.getFec_termino()));
                         d.setDias_a_pagar(p.getDiaspagar());
                         d.setMonto_beca(p.getBeca());
                         d.setDepartamento(p.getDepartamento());
                         d.setCuenta(p.getCuenta());
                         if(p.getFec_baja() != null)
                            d.setFec_baja(f.format(p.getFec_baja()));
                         else
                             d.setFec_baja("");

                         dia=p.getBeca()/30;

                         d.setAjuste(p.getAjusmonto()+(dia * p.getAjustedia()));
                         d.setDeduccion(p.getDedmonto()+(dia * p.getDeducdia()));
                         d.setSeg_emp(p.getSeguroEmpresa());

                         d.setSeg_pract(p.getSeguroPracticante());

                         d.setMonto_pagar(((dia * p.getDiaspagar())+d.getAjuste()));

                         d.setNeto((int)(d.getMonto_pagar() + d.getDeduccion() - p.getSeguroPracticante()));
                         
                        
                         d.setPracticante_Id(p.getFk_convenioId());

                         total += d.getMonto_pagar();
                         seguro_empresa += p.getSeguroEmpresa();

                         lista_detalle.add(d);
                    }
                     double sub_total_sinseguro=0.0;
                     double subtotal_c_seguro=0.0;
                     double iva_1=0.0;
                     double total_1=0.0;
                     double subtotal_c_abonos=0.0;
                     double iva_2=0.0;
                     double total_final=0.0;
                     double g_adm=0.0;

                     PrefacturaCaintra pc=new PrefacturaCaintra();


                                g_adm=(total/100) * (int)(factura.getComision()*100);
                                sub_total_sinseguro=total + g_adm;
                                subtotal_c_seguro = sub_total_sinseguro + seguro_empresa + adeudo_empresa;
                                iva_1 = (subtotal_c_seguro/100)*16;
                                total_1 = subtotal_c_seguro + iva_1;

                                subtotal_c_abonos = subtotal_c_seguro - abono_empresa;
                                iva_2 = (subtotal_c_abonos/100)*16;
                                total_final = subtotal_c_abonos + iva_2;

                                pc.setMonto_a_pagar(total);
                                pc.setGasto_adm(g_adm);
                                pc.setPorcentaje((int)(factura.getComision()*100));
                                pc.setSubtotal_sin_seguro(sub_total_sinseguro);

                                pc.setSeguro_empresa(seguro_empresa);

                                pc.setSubtotal_conseguro(subtotal_c_seguro);

                                pc.setIva_1(iva_1);
                                pc.setTotal_1(total_1);

                                pc.setSubtotal_con_abono(subtotal_c_abonos);
                                pc.setIva_2(iva_2);
                                pc.setTotal_final(total_final);
                                pc.setPrefacturaId(factura.getFk_periodo());
                                if(u == null){
                                    pc.setUsuarioId(164);
                                    pc.setLogin(factura.getAutorizo().trim());
                                }else{
                                    pc.setUsuarioId(u.getUsuarioId());
                                    pc.setLogin(u.getLogin());
                                }
                                
                                pc.setPeriodoId(factura.getFk_periodo());
                                pc.setTipo_factura(1);

                                pc.setFecha_aut(factura.getFec_autorizacion());
                                pc.setRazon_social(factura.getRazon_social());
                                pc.setRfc(factura.getRfc());
                                pc.setIva_factura((int)(factura.getIva()*100));
                                pc.setComision((int)(factura.getComision()*100));
                                pc.setRazon_Empresa(emp.getRazon_empresa());
                                pc.setPeriodo(periodo.getDia_inicio(), periodo.getDia_fin());
                                int res=dLogin.insert_Total_Header(pc);

                                if(res<= 0) break;

                                res=dLogin.insertTotales(lista_detalle, res);

                                if(res<= 0) break;

            }

        }
        


    }

    public void sincroniza_Movimientos(){
        PrefacturaMQuery query=new PrefacturaMQuery();
        try {
            query.getAbonos();
            query.getAdeudos();
        } catch (Exception e) {
        }
    }



    public void copia_datos(){
        String txt="";
        List<PrefacturaCaintra> lista;
        List<PrefacturaDetalle> lista_dt;
        PrefacturaCaintra pc;
        PrefacturaDetalle pd;
        PrefacturaMQuery query=new PrefacturaMQuery();
        String x="45792";
        ids=new ArrayList<String>();
        ids.add(x);ids.add("45904");ids.add("45903");
        try {
        FileWriter head=new FileWriter("C:/Users/Luiz/Desktop/header.txt");
        FileWriter detalle=new FileWriter("C:/Users/Luiz/Desktop/detalle.txt");
        String sql="";
            lista=query.headers(ids);
            lista_dt=query.detalle();
            for(int i=0;i<lista.size();i++){
                pc=(PrefacturaCaintra)lista.get(i);
                sql=query.insert_Total_Header(pc);
                head.write(sql);
                head.write("\n");
                for(int j=0;j<lista_dt.size();j++){
                    pd=(PrefacturaDetalle)lista_dt.get(j);
                    if(pc.getPrefacturaId() == pd.getFk_prefacturaId()){
                        sql=query.insertDetalle(pd);
                        if(sql != null){
                            detalle.write(sql);
                            detalle.write("\n");
                        }
                    }
                        
                }
            }
            head.close();
            detalle.close();
            head.flush();
            detalle.flush();

        } catch (Exception e) {
        }


    }
}
